import _ from 'lodash';
import koa from 'koa';
import * as path from 'path';

import apiError from './api-error';
import page404 from './page-404';

/**
 * 请求分两类：
 *
 * - api: 以 `/api/` 开头
 * - 其他。其中其他又分几类
 *   - 页面
 *   - js、css、图像等静态资源
 *
 * 本中间件处理“页面”请求 404 时的情况。这里定义“页面”请求为不带有拓展名的请求
 */
export default async function (ctx: koa.Context, next: koa.Next) {
  const apiPath = ctx.path;
  if (apiPath.startsWith('/api/')) {
    // 处理所有 /api/* 的错误
    return await apiError(ctx, next);
  } else if (_.isEmpty(path.extname(apiPath))) {
    return await page404(ctx, next);
  } else {
    return await next();
  }
}
